package com.hspedu.spring.bean;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * @Author: lihaojie
 * @Description: 这是一个后置处理器对象
 * @DateTime: 2024/2/20 14:06
 **/
public class MyBeanPostProcessor implements BeanPostProcessor {

    /**
     * 什么时候被调用? 在bean的init方法前被调用
     * @param bean 传入的在ioc容器中配置的那个bean
     * @param beanName 传入的在IOC容器中创建/配置Bean的id
     * @return Object 程序员对传入的bean进行修改和处理 再返回
     * @throws BeansException
     */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessBeforeInitialization()...bean=" + bean + " beanName=" + beanName);
        // 初步体验案例： 如果类型是House的统一改成 上海豪宅
        // 对多个对象进行修改
        if (bean instanceof House) {
            ((House)bean).setName("上海豪宅");
        }
        return bean;
    }

    /**
     * 什么时候被调用？在bean的init方法后被调用
     * @param bean 传入的在ioc容器中创建/配置bean
     * @param beanName 传入的在ioc容器中创建/配置bean的id
     * @return Object 程序员对传入的bean进行修改和处理 再返回
     * @throws BeansException
     */
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessAfterInitialization()...bean=" + bean + " beanName=" + beanName);
        return bean;
    }
}
